package com.zito.health.api.exception;


import com.zito.health.api.result.ResponseBean;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 异常控制处理器
 */
@RestControllerAdvice
public class ExceptionAdvice {

    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    @ExceptionHandler(UnauthorizedException.class)
    public ResponseBean handle401(UnauthorizedException e) {
        //用406了，401被token过期占用了
        return new ResponseBean(HttpStatus.NOT_ACCEPTABLE.value(), "" + e.getMessage() + "", null);
    }


//    /**
//     * 捕捉校验异常(BindException)
//     * @return
//     */
//    @ResponseStatus(HttpStatus.BAD_REQUEST)
//    @ExceptionHandler(BindException.class)
//    public ResponseBean validException(BindException e) {
//        List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
//        Map<String, Object> result = this.getValidError(fieldErrors);
//        return new ResponseBean(HttpStatus.BAD_REQUEST.value(), result.get("errorMsg").toString(), result.get("errorList"));
//    }
//
//    /**
//     * 捕捉校验异常(MethodArgumentNotValidException)
//     * @return
//     */
//    @ResponseStatus(HttpStatus.BAD_REQUEST)
//    @ExceptionHandler(MethodArgumentNotValidException.class)
//    public ResponseBean validException(MethodArgumentNotValidException e) {
//        List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
//        Map<String, Object> result = this.getValidError(fieldErrors);
//        return new ResponseBean(HttpStatus.BAD_REQUEST.value(), result.get("errorMsg").toString(), result.get("errorList"));
//    }
//
//    /**
//     * 捕捉其他所有自定义异常
//     * @return
//     */
//    @ResponseStatus(HttpStatus.BAD_REQUEST)
//    @ExceptionHandler(CustomException.class)
//    public ResponseBean handle(CustomException e) {
//        return new ResponseBean(HttpStatus.BAD_REQUEST.value(), e.getMessage(), null);
//    }
//
//
//    /**
//     * 捕捉404异常
//     * @return
//     */
//    @ResponseStatus(HttpStatus.NOT_FOUND)
//    @ExceptionHandler(NoHandlerFoundException.class)
//    public ResponseBean handle(NoHandlerFoundException e) {
//        return new ResponseBean(HttpStatus.NOT_FOUND.value(), e.getMessage(), null);
//    }
//
//    /**
//     * 捕捉其他所有异常
//     * @param request
//     * @param ex
//     * @return
//     */
//    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
//    @ExceptionHandler(Exception.class)
//    public ResponseBean globalException(HttpServletRequest request, Throwable ex) {
//        return new ResponseBean(this.getStatus(request).value(), ex.toString() + ": " + ex.getMessage(), null);
//    }
//
//    /**
//     * 获取状态码
//     * @param request
//     * @return
//     */
//    private HttpStatus getStatus(HttpServletRequest request) {
//        Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
//        if (statusCode == null) {
//            return HttpStatus.INTERNAL_SERVER_ERROR;
//        }
//        return HttpStatus.valueOf(statusCode);
//    }
//
//    /**
//     * 获取校验错误信息
//     * @param fieldErrors
//     * @return
//     */
//    private Map<String, Object> getValidError(List<FieldError> fieldErrors) {
//        Map<String, Object> result = new HashMap<String, Object>(16);
//        List<String> errorList = new ArrayList<String>();
//        StringBuffer errorMsg = new StringBuffer("校验异常(ValidException):");
//        for (FieldError error : fieldErrors) {
//            errorList.add(error.getField() + "-" + error.getDefaultMessage());
//            errorMsg.append(error.getField()).append("-").append(error.getDefaultMessage()).append(".");
//        }
//        result.put("errorList", errorList);
//        result.put("errorMsg", errorMsg);
//        return result;
//    }
}
